// 接口类型
/* 空值合并运算符（??）是一个逻辑运算符，当左侧的操作数为 null 或者 undefined 时，返回其右侧操作数，否则返回左侧操作数。

与逻辑或运算符（||）不同，逻辑或运算符会在左侧操作数为假值时返回右侧操作数。也就是说，如果使用 || 来为某些变量设置默认值
，可能会遇到意料之外的行为。

token: sesstionStorage.get("token")?sesstionStorage.get("token"):""

token: sesstionStorage.get("token")??""

username: userIfno.username ?? "来宾"

可选链运算符（?.）允许读取位于连接对象链深处的属性的值，而不必明确验证链中的每个引用是否有效。?. 运算符的功能类似于 . 链式运算符，不同之处在于，在引用为空 (nullish ) (null 或者 undefined) 的情况下不会引起错误，该表达式短路返回值是 undefined。与函数调用一起使用时，如果给定的函数不存在，则返回 undefined。

let animal = {cat:{name:"狸花猫"}}
let dogName = animal.dog?.name; //如果dog属性为真，就把dog.name 赋值给dogName变量。

let dogName = animal.dog.name;  // dog属性都不存在，所以在调用name时，就要报错。原因： animal.undefined.name

*/
